En el pasado, ya hemos revisado varias características de las series de tiempo. La paquetería feasts (Feature Extraction And Statistics from Time Series) incluye varias funciones para calcular varias características. Cualquier tipo de resumen que le podamos realizar a una serie de tiempo se consideraría una característica.

Características estadísticas básicas

Algunas de las más sencillas son la media, mínimo, máximo, … y las podemos calcular utilizando la función features(). Tomemos de ejemplo los datos del turismo en Australia, tourism.

library("easypackages")
packages("tidyverse","lubridate", "patchwork", "fpp2","fpp3","scales","DT")
glimpse(tourism)
Rows: 24,320
Columns: 5
Key: Region, State, Purpose [304]
$ Quarter <qtr> 1998 Q1, 1998 Q2, 1998 Q3, 1998 Q4, 1999 Q1, 1999 Q2, 1999 Q3,...
$ Region  <chr> "Adelaide", "Adelaide", "Adelaide", "Adelaide", "Adelaide", "A...
$ State   <chr> "South Australia", "South Australia", "South Australia", "Sout...
$ Purpose <chr> "Business", "Business", "Business", "Business", "Business", "B...
$ Trips   <dbl> 135.0777, 109.9873, 166.0347, 127.1605, 137.4485, 199.9126, 16...
tourism
tourism %>% features(Trips, list(Promedio = mean))

La paquetería DT nos permite crear datatables o tablas interactivas.

tourism %>% 
  features(Trips, list(mean =mean)) %>% 
  datatable(filter = "top",
            style  = "bootstrap")

Si tenemos variables categóricas (factors), podemos filtrar seleccionando cada nivel.

is.character("hola")
[1] TRUE
is.character("8")
[1] TRUE
tourism %>% 
  mutate_at(.vars = c("Region", "State", "Purpose"),
            .funs = as_factor)
tourism %>% 
  as_tibble() %>% 
  group_by(Region, State, Purpose) %>% 
  summarise(Promedio = mean(Trips),
            Desv_std = sd(Trips))
`summarise()` regrouping output by 'Region', 'State' (override with `.groups` argument)
tourism %>% 
  features(Trips, list(Media = mean, 
                       SD    = sd))

Calculamos la característica de la media y se muestra en la columna V1. Si queremos calcular varias características y nombrarlas, lo podemos hacer así:

tourism %>% features(Trips, list(media    = mean,
                                 desv_std = sd,
                                 min      = min,
                                 mediana  = median,
                                 max      = max)) %>% 
  arrange(desc(media))

Como hemos visto anteriormente, existen 5 estadísticas básicas que se deben analizar: el mínimo, primer cuartil, mediana, tercer cuartil y máximo. La función quantile() nos ayuda a calcularlas de manera sencilla:

tourism %>% 
  features(Trips, quantile, prob=seq(0, 1, by=0.25))
sueldo <- c(15000, 12000, 16000, 11000, 10000, 13000, 90000, 80000, 14000, 12000)
mean(sueldo)
[1] 27300
median(sueldo)
[1] 13500
quantile(sueldo, probs = seq(0,1, by = 0.25))
   0%   25%   50%   75%  100% 
10000 12000 13500 15750 90000 

Características de la función de autocorrelación, ACF

La función feat_acf() provee características interesantes acerca de una serie de tiempo:

  • El primer coeficiente de autocorrelación de los datos originales, acf1.
  • La suma del cuadrado de los primeros 10 coeficientes de autocorrelación, de los datos originales, acf10. Este coeficiente nos dice qué tanta autocorrelación tiene la serie, sin importar el rezago.
  • El primer coeficiente de autocorrelación de las primeras diferencias, diff1_acf1.
  • La suma del cuadrado de los primeros 10 coeficientes de autocorrelación, de las primeras diferencias, diff1_acf10.
  • El primer coeficiente de autocorrelación de las segundas diferencias, diff2_acf1.
  • La suma del cuadrado de los primeros 10 coeficientes de autocorrelación, de las segundas diferencias, diff2_acf10.
  • Para datos estacionales, también se obtiene el coeficiente de autocorrelación en el primer rezago estacional.
tourism %>% features(Trips, feat_acf)

Características STL

Se puede definir la fuerza del componente de tendencia o estacional de la siguiente manera:

\[ F_{T} = \max \left(0,1-\frac{\operatorname{Var}\left(R_{t}\right)}{\operatorname{Var}\left(T_{t}+R_{t}\right)}\right) \] Esto para el caso de la tendencia. Similarmente, para medir la fuerza del componente estacional:

\[ F_{S} = \max \left(0,1-\frac{\operatorname{Var}\left(R_{t}\right)}{\operatorname{Var}\left(S_{t}+R_{t}\right)}\right) \] En ambos casos, lo que indican las ecuaciones es que la fuerza está medida entre cero y uno, siendo cero el indicador de nula o muy pequeña tendencia y/o estacionalidad, y valores cercanos a uno indicando una fuerte tendencia y/o estacionalidad.

Esto es útil cuando se quiere discernir cuáles series de tiempo tienen la mayor estacionalidad o tendencia. Otras características interesantes son las del tiempo de los picos y valles; qué mes o trimestre es el de mayor estacionalidad y cuál el de menor, p. ej.

Podemos obtener todas estas características con la función feat_stl().

tourism %>% 
  filter(Region  == "Adelaide",
         Purpose %in% c("Business", "Holiday")) %>% 
  autoplot() %>% 
  plotly::ggplotly()
Plot variable not specified, automatically selected `.vars = Trips`

tourism %>%
  features(Trips, feat_stl)
LS0tDQp0aXRsZTogIkNhcmFjdGVyw61zdGljYXMgZGUgbGFzIHNlcmllcyBkZSB0aWVtcG8iDQphdXRob3I6ICJQYWJsbyBCZW5hdmlkZXMtSGVycmVyYSINCmRhdGU6IDIwMjAtMDQtMDENCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdGhlbWU6IHVuaXRlZA0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgZ2l0aHViX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgZGV2OiBqcGVnDQphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZQ0KLS0tDQoNCiFbXSguLi9pbWFnZXMvZmVhc3RzLnBuZykNCg0KRW4gZWwgcGFzYWRvLCB5YSBoZW1vcyByZXZpc2FkbyB2YXJpYXMgY2FyYWN0ZXLDrXN0aWNhcyBkZSBsYXMgc2VyaWVzIGRlIHRpZW1wby4gTGEgcGFxdWV0ZXLDrWEgW2BmZWFzdHNgXShodHRwczovL2ZlYXN0cy50aWR5dmVydHMub3JnLykgKigqKkYqKmVhdHVyZSAqKkUqKnh0cmFjdGlvbiAqKkEqKm5kICoqUyoqdGF0aXN0aWNzIGZyb20gKipUKippbWUgKipTKiplcmllcykqIGluY2x1eWUgdmFyaWFzIGZ1bmNpb25lcyBwYXJhIGNhbGN1bGFyIHZhcmlhcyBjYXJhY3RlcsOtc3RpY2FzLiBDdWFscXVpZXIgdGlwbyBkZSByZXN1bWVuIHF1ZSBsZSBwb2RhbW9zIHJlYWxpemFyIGEgdW5hIHNlcmllIGRlIHRpZW1wbyBzZSBjb25zaWRlcmFyw61hIHVuYSBjYXJhY3RlcsOtc3RpY2EuDQoNCiMjIyBDYXJhY3RlcsOtc3RpY2FzIGVzdGFkw61zdGljYXMgYsOhc2ljYXMNCg0KQWxndW5hcyBkZSBsYXMgbcOhcyBzZW5jaWxsYXMgc29uIGxhIG1lZGlhLCBtw61uaW1vLCBtw6F4aW1vLCAuLi4geSBsYXMgcG9kZW1vcyBjYWxjdWxhciB1dGlsaXphbmRvIGxhIGZ1bmNpw7NuIGBmZWF0dXJlcygpYC4gVG9tZW1vcyBkZSBlamVtcGxvIGxvcyBkYXRvcyBkZWwgdHVyaXNtbyBlbiBBdXN0cmFsaWEsIGB0b3VyaXNtYC4NCg0KYGBge3Igc3RhdCBmZWF0dXJlczEsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KCJlYXN5cGFja2FnZXMiKQ0KcGFja2FnZXMoInRpZHl2ZXJzZSIsImx1YnJpZGF0ZSIsICJwYXRjaHdvcmsiLCAiZnBwMiIsImZwcDMiLCJzY2FsZXMiLCJEVCIpDQpnbGltcHNlKHRvdXJpc20pDQp0b3VyaXNtDQp0b3VyaXNtICU+JSBmZWF0dXJlcyhUcmlwcywgbGlzdChQcm9tZWRpbyA9IG1lYW4pKQ0KYGBgDQoNCioqKg0KTGEgcGFxdWV0ZXLDrWEgYERUYCBub3MgcGVybWl0ZSBjcmVhciBgZGF0YXRhYmxlc2AgbyB0YWJsYXMgaW50ZXJhY3RpdmFzLg0KDQpgYGB7cn0NCnRvdXJpc20gJT4lIA0KICBmZWF0dXJlcyhUcmlwcywgbGlzdChtZWFuID1tZWFuKSkgJT4lIA0KICBkYXRhdGFibGUoZmlsdGVyID0gInRvcCIpDQpgYGANCg0KU2kgdGVuZW1vcyB2YXJpYWJsZXMgY2F0ZWfDs3JpY2FzIChgZmFjdG9yc2ApLCBwb2RlbW9zIGZpbHRyYXIgc2VsZWNjaW9uYW5kbyBjYWRhIG5pdmVsLg0KDQpgYGB7cn0NCmlzLmNoYXJhY3RlcigiaG9sYSIpDQppcy5jaGFyYWN0ZXIoOCkNCg0KdG91cmlzbSAlPiUgDQogIG11dGF0ZSgNCiAgICBSZWdpb24gID0gYXNfZmFjdG9yKFJlZ2lvbiksDQogICAgU3RhdGUgICA9IGFzX2ZhY3RvcihTdGF0ZSksDQogICAgUHVycG9zZSA9IGFzX2ZhY3RvcihQdXJwb3NlKQ0KICApDQpgYGANCmBgYHtyfQ0KdG91cmlzbSAlPiUgDQogIG11dGF0ZV9hdCgudmFycyA9IGMoIlJlZ2lvbiIsICJTdGF0ZSIsICJQdXJwb3NlIiksDQogICAgICAgICAgICAuZnVucyA9IGFzX2ZhY3RvcikNCmBgYA0KDQoNCmBgYHtyfQ0KdG91cmlzbSAlPiUgDQogIG11dGF0ZV9pZihpcy5jaGFyYWN0ZXIsIGFzX2ZhY3RvcikgJT4lIA0KICBmZWF0dXJlcyhUcmlwcywgbGlzdChQcm9tZWRpbyA9IG1lYW4pKSAlPiUgDQogIGRhdGF0YWJsZShmaWx0ZXIgPSAidG9wIikNCmBgYA0KDQpgYGB7cn0NCnRvdXJpc20gJT4lIA0KICBhc190aWJibGUoKSAlPiUgDQogIGdyb3VwX2J5KFJlZ2lvbiwgU3RhdGUsIFB1cnBvc2UpICU+JSANCiAgc3VtbWFyaXNlKFByb21lZGlvID0gbWVhbihUcmlwcyksDQogICAgICAgICAgICBEZXN2X3N0ZCA9IHNkKFRyaXBzKSkNCg0KdG91cmlzbSAlPiUgDQogIGZlYXR1cmVzKFRyaXBzLCBsaXN0KE1lZGlhID0gbWVhbiwgDQogICAgICAgICAgICAgICAgICAgICAgIFNEICAgID0gc2QpKQ0KYGBgDQoNCg0KDQoqKioNCg0KQ2FsY3VsYW1vcyBsYSBjYXJhY3RlcsOtc3RpY2EgZGUgbGEgbWVkaWEgeSBzZSBtdWVzdHJhIGVuIGxhIGNvbHVtbmEgYFYxYC4gU2kgcXVlcmVtb3MgY2FsY3VsYXIgdmFyaWFzIGNhcmFjdGVyw61zdGljYXMgeSBub21icmFybGFzLCBsbyBwb2RlbW9zIGhhY2VyIGFzw606DQoNCmBgYHtyIHN0YXQgZmVhdHVyZXMyfQ0KdG91cmlzbSAlPiUgZmVhdHVyZXMoVHJpcHMsIGxpc3QobWVkaWEgICAgPSBtZWFuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdl9zdGQgPSBzZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbiAgICAgID0gbWluLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFuYSAgPSBtZWRpYW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXggICAgICA9IG1heCkpICU+JSANCiAgYXJyYW5nZShkZXNjKG1lZGlhKSkNCmBgYA0KDQpDb21vIGhlbW9zIHZpc3RvIGFudGVyaW9ybWVudGUsIGV4aXN0ZW4gNSBlc3RhZMOtc3RpY2FzIGLDoXNpY2FzIHF1ZSBzZSBkZWJlbiBhbmFsaXphcjogZWwgbcOtbmltbywgcHJpbWVyIGN1YXJ0aWwsIG1lZGlhbmEsIHRlcmNlciBjdWFydGlsIHkgbcOheGltby4gTGEgZnVuY2nDs24gYHF1YW50aWxlKClgIG5vcyBheXVkYSBhIGNhbGN1bGFybGFzIGRlIG1hbmVyYSBzZW5jaWxsYToNCg0KYGBge3IgUXVhcnRpbGUgZmVhdHVyZXN9DQp0b3VyaXNtICU+JSANCiAgZmVhdHVyZXMoVHJpcHMsIHF1YW50aWxlLCBwcm9iPXNlcSgwLCAxLCBieT0wLjI1KSkNCmBgYA0KDQpgYGB7cn0NCnN1ZWxkbyA8LSBjKDE1MDAwLCAxMjAwMCwgMTYwMDAsIDExMDAwLCAxMDAwMCwgMTMwMDAsIDkwMDAwLCA4MDAwMCwgMTQwMDAsIDEyMDAwKQ0KbWVhbihzdWVsZG8pDQptZWRpYW4oc3VlbGRvKQ0KcXVhbnRpbGUoc3VlbGRvLCBwcm9icyA9IHNlcSgwLDEsIGJ5ID0gMC4yNSkpDQpgYGANCg0KIyMjIENhcmFjdGVyw61zdGljYXMgZGUgbGEgZnVuY2nDs24gZGUgYXV0b2NvcnJlbGFjacOzbiwgQUNGDQoNCkxhIGZ1bmNpw7NuIGBmZWF0X2FjZigpYCBwcm92ZWUgY2FyYWN0ZXLDrXN0aWNhcyBpbnRlcmVzYW50ZXMgYWNlcmNhIGRlIHVuYSBzZXJpZSBkZSB0aWVtcG86DQoNCiogRWwgcHJpbWVyIGNvZWZpY2llbnRlIGRlIGF1dG9jb3JyZWxhY2nDs24gZGUgbG9zIGRhdG9zIG9yaWdpbmFsZXMsIGBhY2YxYC4NCiogTGEgc3VtYSBkZWwgY3VhZHJhZG8gZGUgbG9zIHByaW1lcm9zIDEwIGNvZWZpY2llbnRlcyBkZSBhdXRvY29ycmVsYWNpw7NuLCBkZSBsb3MgZGF0b3Mgb3JpZ2luYWxlcywgYGFjZjEwYC4gRXN0ZSBjb2VmaWNpZW50ZSBub3MgZGljZSBxdcOpIHRhbnRhIGF1dG9jb3JyZWxhY2nDs24gdGllbmUgbGEgc2VyaWUsIHNpbiBpbXBvcnRhciBlbCByZXphZ28uDQoqIEVsIHByaW1lciBjb2VmaWNpZW50ZSBkZSBhdXRvY29ycmVsYWNpw7NuIGRlIGxhcyBwcmltZXJhcyBkaWZlcmVuY2lhcywgYGRpZmYxX2FjZjFgLg0KKiBMYSBzdW1hIGRlbCBjdWFkcmFkbyBkZSBsb3MgcHJpbWVyb3MgMTAgY29lZmljaWVudGVzIGRlIGF1dG9jb3JyZWxhY2nDs24sIGRlIGxhcyBwcmltZXJhcyBkaWZlcmVuY2lhcywgYGRpZmYxX2FjZjEwYC4NCiogRWwgcHJpbWVyIGNvZWZpY2llbnRlIGRlIGF1dG9jb3JyZWxhY2nDs24gZGUgbGFzIHNlZ3VuZGFzIGRpZmVyZW5jaWFzLCBgZGlmZjJfYWNmMWAuDQoqIExhIHN1bWEgZGVsIGN1YWRyYWRvIGRlIGxvcyBwcmltZXJvcyAxMCBjb2VmaWNpZW50ZXMgZGUgYXV0b2NvcnJlbGFjacOzbiwgZGUgbGFzIHNlZ3VuZGFzIGRpZmVyZW5jaWFzLCBgZGlmZjJfYWNmMTBgLg0KKiBQYXJhIGRhdG9zIGVzdGFjaW9uYWxlcywgdGFtYmnDqW4gc2Ugb2J0aWVuZSBlbCBjb2VmaWNpZW50ZSBkZSBhdXRvY29ycmVsYWNpw7NuIGVuIGVsIHByaW1lciByZXphZ28gZXN0YWNpb25hbC4NCg0KYGBge3IgQUNGIGZlYXR1cmVzfQ0KdG91cmlzbSAlPiUgZmVhdHVyZXMoVHJpcHMsIGZlYXRfYWNmKQ0KYGBgDQojIyMgQ2FyYWN0ZXLDrXN0aWNhcyBTVEwNCg0KU2UgcHVlZGUgZGVmaW5pciBsYSAqKmZ1ZXJ6YSBkZWwgY29tcG9uZW50ZSBkZSB0ZW5kZW5jaWEgbyBlc3RhY2lvbmFsKiogZGUgbGEgc2lndWllbnRlIG1hbmVyYToNCg0KJCQNCkZfe1R9ID0gXG1heCBcbGVmdCgwLDEtXGZyYWN7XG9wZXJhdG9ybmFtZXtWYXJ9XGxlZnQoUl97dH1ccmlnaHQpfXtcb3BlcmF0b3JuYW1le1Zhcn1cbGVmdChUX3t0fStSX3t0fVxyaWdodCl9XHJpZ2h0KQ0KJCQNCkVzdG8gcGFyYSBlbCBjYXNvIGRlIGxhIHRlbmRlbmNpYS4gU2ltaWxhcm1lbnRlLCBwYXJhIG1lZGlyIGxhIGZ1ZXJ6YSBkZWwgY29tcG9uZW50ZSBlc3RhY2lvbmFsOg0KDQokJA0KRl97U30gPSBcbWF4IFxsZWZ0KDAsMS1cZnJhY3tcb3BlcmF0b3JuYW1le1Zhcn1cbGVmdChSX3t0fVxyaWdodCl9e1xvcGVyYXRvcm5hbWV7VmFyfVxsZWZ0KFNfe3R9K1Jfe3R9XHJpZ2h0KX1ccmlnaHQpDQokJA0KRW4gYW1ib3MgY2Fzb3MsIGxvIHF1ZSBpbmRpY2FuIGxhcyBlY3VhY2lvbmVzIGVzIHF1ZSBsYSBmdWVyemEgZXN0w6EgbWVkaWRhIGVudHJlIGNlcm8geSB1bm8sIHNpZW5kbyBjZXJvIGVsIGluZGljYWRvciBkZSBudWxhIG8gbXV5IHBlcXVlw7FhIHRlbmRlbmNpYSB5L28gZXN0YWNpb25hbGlkYWQsIHkgdmFsb3JlcyBjZXJjYW5vcyBhIHVubyBpbmRpY2FuZG8gdW5hIGZ1ZXJ0ZSB0ZW5kZW5jaWEgeS9vIGVzdGFjaW9uYWxpZGFkLg0KDQpFc3RvIGVzIMO6dGlsIGN1YW5kbyBzZSBxdWllcmUgZGlzY2VybmlyIGN1w6FsZXMgc2VyaWVzIGRlIHRpZW1wbyB0aWVuZW4gbGEgbWF5b3IgZXN0YWNpb25hbGlkYWQgbyB0ZW5kZW5jaWEuIE90cmFzIGNhcmFjdGVyw61zdGljYXMgaW50ZXJlc2FudGVzIHNvbiBsYXMgZGVsIHRpZW1wbyBkZSBsb3MgcGljb3MgeSB2YWxsZXM7IHF1w6kgbWVzIG8gdHJpbWVzdHJlIGVzIGVsIGRlIG1heW9yIGVzdGFjaW9uYWxpZGFkIHkgY3XDoWwgZWwgZGUgbWVub3IsIHAuIGVqLg0KDQpQb2RlbW9zIG9idGVuZXIgdG9kYXMgZXN0YXMgY2FyYWN0ZXLDrXN0aWNhcyBjb24gbGEgZnVuY2nDs24gYGZlYXRfc3RsKClgLg0KDQpgYGB7ciBTVEwgZmVhdHVyZXN9DQp0b3VyaXNtICU+JSANCiAgZmlsdGVyKFJlZ2lvbiAgPT0gIkFkZWxhaWRlIiwNCiAgICAgICAgIFB1cnBvc2UgJWluJSBjKCJCdXNpbmVzcyIsICJIb2xpZGF5IikpICU+JSANCiAgYXV0b3Bsb3QoKSAlPiUgDQogIHBsb3RseTo6Z2dwbG90bHkoKQ0KdG91cmlzbSAlPiUNCiAgZmVhdHVyZXMoVHJpcHMsIGZlYXRfc3RsKQ0KYGBgDQo=